from mathFunction import MyTestCase
import unittest

"""
    如果想要使用 unittest 来做单元测试  需要导入 unittest 的模块
    1. 在导入单元测试 unittest 模块之后，在做测试是要单独创建一些测试类
        1. 测试类在创建完毕之后要继承 unittest.TestCase模块
"""


# 创建一个测试类（测试集）
class MyTestCaseTwo(unittest.TestCase):
    """
        在测试类中，可以创建多个测试用例（测试方法）
        在创建测试方法时：
            约束：方法（函数）的名字一定要以  test_开头
    """

    """
        在unittest 单元测试 工具框架中
        在某一个测试函数（测试用例）执行开始之前 去进行初始化操作  
        在某一个测试函数（测试用例）执行开始之后 去进行测试收尾工作 
        
        在整个测试集开始运行之前 初始化
        在整个测试集开始运行之后 首尾
    """

    """
        在 unittest 测试集中 ，想要忽略 某一个测试方法（函数） 有四种
        @unittest.skip('就不想执行')   直接跳过不执行
        @unittest.skipIf(reason='当条件成立(True)的时候忽略执行此方法', condition=5 < 3)
        @unittest.skipUnless(reason='当条件不成立(False)的时候忽略执行此方法', condition=5 < 3)
        
    """

    """
        在测试集中创建单独的测试用例
    """

    #  setUp 函数：是 类中有几个测试函数就执行几次，在函数开始执行前执行
    def setUp(self) -> None:
        print('在类中的每个方法开始执行前运行')

    #  tearDown 函数：是 类中有几个测试函数就执行几次，在函数运行完毕之后执行
    def tearDown(self) -> None:
        print('在类中的每个方法运行结束后运行')

    #  setUpClass 函数：是 在整个测试集开始执行前执行
    @classmethod
    def setUpClass(cls) -> None:
        print('测试集运行前运行')

    #  setUpClass 函数：是 在整个测试集运行结束后执行
    @classmethod
    def tearDownClass(cls) -> None:
        print('测试集运行结束后运行')

    # @unittest.skip('就不想执行')
    # @unittest.skipIf(reason='当条件成立(True)的时候忽略执行此方法', condition=5 < 3)
    # @unittest.skipUnless(reason='当条件不成立(False)的时候忽略执行此方法', condition=5 < 3)
    def test_add(self):
        """测试加法的测试用例的执行"""
        self.skipTest('在测试函数体内部跳过执行此方法')
        result = MyTestCase.calc_add(3, 4)
        # 在测试用例中可以通过 断言来判断测试是否通过
        # 断言在使用的使用 通过预期值 和 实际值 来判断 测试是否通过
        print('加法的结果：%s' % result)
        self.assertEqual(7, result)

    def test_less(self):
        """测试减法的测试用例的执行"""
        result = MyTestCase.calc_less(3, 4)
        # 在测试用例中可以通过 断言来判断测试是否通过
        # 断言在使用的使用 通过预期值 和 实际值 来判断 测试是否通过
        print('减法的结果：%s' % result)
        self.assertEqual(-2, result)

    def test_multi(self):
        """测试乘法的测试用例的执行"""
        result = MyTestCase.calc_multi(3, 4)
        # 在测试用例中可以通过 断言来判断测试是否通过
        print('乘法的结果：%s' % result)
        # 断言在使用的使用 通过预期值 和 实际值 来判断 测试是否通过
        self.assertEqual(12, result)

    def test_except(self):
        """测试除法的测试用例的执行"""
        result = MyTestCase.calc_except(3, 4)
        # 在测试用例中可以通过 断言来判断测试是否通过
        print('除法的结果：%s' % result)
        # 断言在使用的使用 通过预期值 和 实际值 来判断 测试是否通过
        self.assertEqual(0.75, result)


if __name__ == '__main__':
    # 通过 单元测试中的 main 方法来执行测试集
    unittest.main()
